package com.intellagric.agriecom.service.recommend.service;

import com.github.pagehelper.PageHelper;
import com.intellagric.agriecom.module.recommend.RuleServiceIN;
import com.intellagric.mapper.AgriecomProduceMapper;
import com.intellagric.mapper.RecommendTemplateMapper;
import com.intellagric.pojo.AgriecomProduce;
import com.intellagric.pojo.AgriecomProduceExample;
import com.intellagric.pojo.RecommendTemplate;
import com.intellagric.pojo.RecommendTemplateExample;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * @Auther: zhy
 * @Date: 2019/5/8
 * @Description: 推荐规则管理服务
 */
@Service
public class RuleService implements RuleServiceIN {

    @Autowired
    private RecommendTemplateMapper recommendTemplateMapper;

    @Autowired
    private AgriecomProduceMapper productMapper;

    /**
     * 根据栏位ID查询是够对应的推荐模板
     *
     * @param columnId
     * @return Template
     */
    public RecommendTemplate getTemplateByColumnId(int columnId) {
        RecommendTemplateExample recommendTemplateExample = new RecommendTemplateExample();
        recommendTemplateExample.createCriteria().andColumnIdEqualTo(columnId);
        List<RecommendTemplate> recommendTemplateList = recommendTemplateMapper.selectByExample(recommendTemplateExample);
        RecommendTemplate template = new RecommendTemplate();
        if (recommendTemplateList.size() > 0) {
            template = recommendTemplateList.get(0);
            List<String> productIdListByDefault = getProductIdListByDefault(template.getDefaultProducts());
            //封装默认产品列表信息
            AgriecomProduceExample productExample = new AgriecomProduceExample();
            productExample.createCriteria().andProduceIdIn(productIdListByDefault);
            List<AgriecomProduce> productList = productMapper.selectByExample(productExample);
            template.setDefaultProductList(productList);
        }
        return template;
    }


    /**
     * 添加推荐规则模板信息
     * @param recommendTemplate
     * @return int
     */
    public int addRecommendTemplate(RecommendTemplate recommendTemplate) {
        return recommendTemplateMapper.insertSelective(recommendTemplate);
    }

    /**
     * 删除推荐规则模板信息
     * @param id
     * @return int
     */
    public int deleteRecommendTemplate(String id) {
        return recommendTemplateMapper.deleteByPrimaryKey(id);
    }

    /**
     * 修改推荐规则模板信息
     * @param
     * @return int
     */
    public int editRecommendTemplate(RecommendTemplate recommendTemplate) {
        return recommendTemplateMapper.updateByPrimaryKeySelective(recommendTemplate);
    }

    /**
     * 通过id查询推荐规则模板
     * @param id
     * @return RecommendTemplate
     */
    public RecommendTemplate queryRecommendTemplateById(String id) {
        return recommendTemplateMapper.selectByPrimaryKey(id);
    }

    /**
     * 查询所有推荐规则模板信息
     * @return List<RecommendTemplate>
     */
    public List<RecommendTemplate> queryRecommendTemplateList() {
        RecommendTemplateExample RecommendTemplateExample = new RecommendTemplateExample();
        RecommendTemplateExample.createCriteria().andIdIsNotNull();
        return recommendTemplateMapper.selectByExample(RecommendTemplateExample);
    }

    /**
     * 分页查询所有推荐规则模板记录
     * @return List<RecommendTemplate>
     */
    public List<RecommendTemplate> queryRecommendTemplatePage(int page, int rows) {
        PageHelper.startPage(page, rows);
        RecommendTemplateExample RecommendTemplateExample = new RecommendTemplateExample();
        RecommendTemplateExample.createCriteria().andIdIsNotNull();
        return recommendTemplateMapper.selectByExample(RecommendTemplateExample);
    }

    /**
     * 从默认的推荐商品id串中获取商品id数组
     *
     * @param defaultProductIds
     * @return List<String>
     */
    private List<String> getProductIdListByDefault(String defaultProductIds) {
        List<String> list = new ArrayList<>();
        if (StringUtils.isNotBlank(defaultProductIds)) {
            String[] productIds = defaultProductIds.split(",");
            for (String item : productIds) {
                list.add(item);
            }
        }
        return list;
    }

}
